home *** CD-ROM | disk | FTP | other *** search
/ Dr. Windows 3 / dr win3.zip / dr win3 / WINPROGS / UPC12BS1.ZIP / UUCICO / DCPLIB.C < prev    next >
C/C++ Source or Header  |  1993-09-29  |  17KB  |  439 lines

  1. /*--------------------------------------------------------------------*/
  2. /*    d c p l i b . c                                                 */
  3. /*                                                                    */
  4. /*    DCP system-dependent library                                    */
  5. /*                                                                    */
  6. /*    Services provided by dcplib.c:                                  */
  7. /*                                                                    */
  8. /*    - login                                                         */
  9. /*    - UNIX commands simulation                                      */
  10. /*--------------------------------------------------------------------*/
  11.  
  12. /*--------------------------------------------------------------------*/
  13. /*    Changes Copyright (c) 1989-1993 by Kendra Electronic            */
  14. /*    Wonderworks.                                                    */
  15. /*                                                                    */
  16. /*    All rights reserved except those explicitly granted by the      */
  17. /*    UUPC/extended license agreement.                                */
  18. /*--------------------------------------------------------------------*/
  19.  
  20. /*--------------------------------------------------------------------*/
  21. /*    Copyright (c) Richard H. Lamb 1985, 1986, 1987                  */
  22. /*    Changes Copyright (c) Stuart Lynne 1987                         */
  23. /*--------------------------------------------------------------------*/
  24.  
  25. /*
  26.  *    $Id: dcplib.c 1.7 1993/09/29 04:52:03 ahd Exp $
  27.  *
  28.  *    $Log: dcplib.c $
  29.  * Revision 1.7  1993/09/29  04:52:03  ahd
  30.  * Make device name use standard modem file configuration prefix
  31.  *
  32.  * Revision 1.6  1993/09/20  04:48:25  ahd
  33.  * TCP/IP support from Dave Watt
  34.  * 't' protocol support
  35.  * OS/2 2.x support (BC++ 1.0 for OS/2)
  36.  *
  37.  * Revision 1.5  1993/07/24  03:40:55  ahd
  38.  * Correct #ifif to #ifel
  39.  *
  40.  * Revision 1.4  1993/07/22  23:22:27  ahd
  41.  * First pass at changes for Robert Denny's Windows 3.1 support
  42.  *
  43.  * Revision 1.3  1993/05/30  00:01:47  ahd
  44.  * Multiple commuications drivers support
  45.  *
  46.  *
  47.  * Updated:
  48.  *
  49.  *    14May89  - Added system name to login prompt - ahd
  50.  *               Added configuration file controlled user id, password
  51.  *               Added Kermit server option
  52.  *    17May89  - Redo login processing to time out after five minutes;
  53.  *               after all, we have to exit someday.                    ahd
  54.  *    22Sep89  - Add password file processing                           ahd
  55.  *    24Sep89  - Modify login() to issue only one wait command for up
  56.  *               to 32K seconds; this cuts down LOGFILE clutter.        ahd
  57.  *    01Oct89  - Re-do function headers to allow copying for function
  58.  *               prototypes in ulib.h                                   ahd
  59.  *    17Jan90  - Filter unprintable characters from logged userid and
  60.  *               password to prevent premature end of file.             ahd
  61.  *    18Jan90  - Alter processing of alternate shells to directly
  62.  *               invoke program instead of using system() call.         ahd
  63.  * 6  Sep 90   - Change logging of line data to printable               ahd
  64.  *    8 Sep 90 - Split ulib.c into dcplib.c and ulib.c                  ahd
  65.  *    8 Oct 90 - Break rmail.com and rnews.com out of uuio
  66.  *               Add FIXED_SPEED option for no-autobauding              ahd
  67.  *    10Nov 90 - Move sleep call into ssleep and rename                 ahd
  68.  */
  69.  
  70. /*--------------------------------------------------------------------*/
  71. /*                        System include files                        */
  72. /*--------------------------------------------------------------------*/
  73.  
  74. #include <ctype.h>
  75. #include <direct.h>
  76. #include <dos.h>
  77. #include <process.h>
  78. #include <stdio.h>
  79. #include <stdlib.h>
  80. #include <string.h>
  81. #include <sys/types.h>
  82. #include <time.h>
  83.  
  84. #ifdef __TURBOC__
  85. #include <sys/timeb.h>
  86. #endif
  87.  
  88. #if defined(_Windows)
  89. #include <windows.h>
  90. #endif
  91.  
  92. /*--------------------------------------------------------------------*/
  93. /*                    UUPC/extended include files                     */
  94. /*--------------------------------------------------------------------*/
  95.  
  96. #include "lib.h"
  97. #include "arpadate.h"
  98. #include "dcp.h"
  99. #include "dcplib.h"
  100. #include "dcpsys.h"
  101. #include "hlib.h"
  102. #include "hostable.h"
  103. #include "import.h"
  104. #include "modem.h"
  105. #include "pushpop.h"
  106. #include "security.h"
  107. #include "ssleep.h"
  108. #include "commlib.h"
  109. #include "usertabl.h"
  110. #include "timestmp.h"
  111.  
  112. /*--------------------------------------------------------------------*/
  113. /*        Define current file name for panic() and printerr()         */
  114. /*--------------------------------------------------------------------*/
  115.  
  116. #if !defined(_Windows)
  117. currentfile();
  118. #endif
  119.  
  120. /*--------------------------------------------------------------------*/
  121. /*                    Internal function prototypes                    */
  122. /*--------------------------------------------------------------------*/
  123.  
  124. static void LoginShell( const   struct UserTable *userp );
  125.  
  126. void motd( const char *fname, char *buf, const int bufsiz );
  127.  
  128. /*--------------------------------------------------------------------*/
  129. /*    l o g i n                                                       */
  130. /*                                                                    */
  131. /*    Login handler                                                   */
  132. /*--------------------------------------------------------------------*/
  133.  
  134. boolean login(void)
  135. {
  136.    char line[BUFSIZ];                  /* Allow for long domain names!  */
  137.    char user[50];
  138.    char pswd[50];
  139.    char attempts = 0;                  /* Allows login tries         */
  140.    char *token;                        /* Pointer to returned token  */
  141.    struct UserTable *userp;
  142.  
  143. #if defined(_Windows)
  144.    WORD wVersion;
  145. #endif
  146.  
  147.    if ( E_banner != NULL )
  148.       motd( E_banner, line, sizeof line );
  149.  
  150. /*--------------------------------------------------------------------*/
  151. /*    Our modem is now connected.  Begin actual login processing      */
  152. /*    by displaying a banner.                                         */
  153. /*--------------------------------------------------------------------*/
  154.  
  155. #if defined(_Windows)
  156.     wVersion = LOWORD(GetVersion());
  157.     sprintf(line, "\r\n\nMS-Windows(TM) %d.%02d with %s %s (%s) (%s)\r\n",
  158.          (WORD)(LOBYTE(wVersion)),
  159.          (WORD)(HIBYTE(wVersion)),
  160.           compilep,
  161.           compilev,
  162.          E_domain,
  163.          M_device);           // Print a hello message
  164.  
  165. #else /* not Windows */
  166.  
  167.    sprintf(line,"\r\n\n%s %d.%02d with %s %s (%s) (%s)\r\n",
  168. #ifdef WIN32
  169.             "Windows NT(TM)",
  170.             _winmajor,
  171.             _winminor,
  172. #elif defined(__OS2__)
  173.             "OS/2(R)",
  174.             (int) _osmajor / 10,
  175.             _osminor,
  176. #elif defined( __TURBOC__ )
  177.             "MS-DOS(R)",
  178.             _osmajor,
  179.             _osminor,
  180. #else
  181.             (_osmode == DOS_MODE) ? "DOS" : "OS/2(R)" ,
  182.             (_osmode == DOS_MODE) ? (int) _osmajor : ((int) _osmajor / 10 ),
  183.             _osminor,
  184. #endif
  185.             compilep,
  186.             compilev,
  187.             E_domain,
  188.             M_device); /* Print a hello message            */
  189. #endif
  190.  
  191.    wmsg(line,0);
  192.    ddelay(250);
  193.  
  194. /*--------------------------------------------------------------------*/
  195. /*    Display a login prompt until we get a printable character or    */
  196. /*    the login times out                                             */
  197. /*--------------------------------------------------------------------*/
  198.  
  199.    for ( attempts = 0; attempts < 5 ; attempts++ )
  200.    {
  201.       boolean invalid = TRUE;
  202.       while (invalid)         /* Spin for a user id or timeout       */
  203.       {
  204.          wmsg("\r\nlogin: ", 0);
  205.          strcpy(user,"");
  206.          if (rmsg(user, 2, 30, sizeof user) == TIMEOUT)
  207.                                     /* Did the user enter data?  */
  208.             return FALSE;   /* No --> Give up                */
  209.  
  210.          if (equal(user,"NO